import org.junit.Test;
import org.junit.Assert;



public class TestGiudice {
		
	@Test
	public void testLunghezza(){
		Assert.assertTrue(Giudice.valida("1234"));
		Assert.assertFalse(Giudice.valida(""));
		
	}
	
	@Test
	public void testCaratteri(){
		Assert.assertTrue(Giudice.valida("1234"));
		Assert.assertFalse(Giudice.valida("i9h!"));
	}
	
	@Test
	public void testNonRipetute(){
		Assert.assertFalse(Giudice.valida("1231"));
		Assert.assertTrue(Giudice.valida("1234"));
		Assert.assertTrue(Giudice.valida("3901"));
		Assert.assertFalse(Giudice.valida("1123"));
		Assert.assertFalse(Giudice.valida("3333"));
		Assert.assertFalse(Giudice.valida("9459"));
	}
	
	@Test
	public void testBulls() {
		Assert.assertTrue(Giudice.numBulls("1234", "5678") == 0);
		Assert.assertTrue(Giudice.numBulls("1234", "1876") == 1);
		Assert.assertTrue(Giudice.numBulls("1234", "9874") == 1);
		Assert.assertTrue(Giudice.numBulls("1234", "9243") == 1);
		Assert.assertTrue(Giudice.numBulls("9876", "5573") == 1);
		Assert.assertTrue(Giudice.numBulls("1234", "1256") == 2);
		Assert.assertTrue(Giudice.numBulls("1234", "1537") == 2);
		Assert.assertTrue(Giudice.numBulls("1234", "1764") == 2);
		Assert.assertTrue(Giudice.numBulls("1234", "8237") == 2);
		Assert.assertTrue(Giudice.numBulls("1234", "9834") == 2);
		Assert.assertTrue(Giudice.numBulls("9264", "9261") == 3);
		Assert.assertTrue(Giudice.numBulls("9264", "9284") == 3);
		Assert.assertTrue(Giudice.numBulls("9264", "9764") == 3);
		Assert.assertTrue(Giudice.numBulls("9264", "5264") == 3);
		Assert.assertTrue(Giudice.numBulls("9264", "9264") == 4);
		Assert.assertTrue(Giudice.numBulls("8725", "8725") == 4);
	}

	@Test
	public void testMaggots() {
		Assert.assertTrue(Giudice.numMaggots("1234", "1234") == 0);
		Assert.assertTrue(Giudice.numMaggots("1234", "4321") == 4);
		Assert.assertTrue(Giudice.numMaggots("8234", "3746") == 2);
		Assert.assertTrue(Giudice.numMaggots("8234", "9763") == 1);
		Assert.assertTrue(Giudice.numMaggots("1234", "2345") == 3);
	}
	
	
	
	@Test
	public void testRandomTarget(){
		Assert.assertTrue(Giudice.valida(Giudice.genTarget()));
		Assert.assertTrue(Giudice.valida(Giudice.genTarget()));
		Assert.assertTrue(Giudice.valida(Giudice.genTarget()));
		Assert.assertTrue(Giudice.valida(Giudice.genTarget()));
		Assert.assertTrue(Giudice.valida(Giudice.genTarget()));
	}
}
